// 数组nn格式, 不局限于十进制
export function formatNum (n) {
  n = n.toString()
  return n[1] ? n : `0${n}`
}

// 将秒数转化成 00:00 的形式
export function formatSecond (time) {
  const minute = Math.floor(time / 60)
  const second = time % 60
  return formatNum(minute) + ':' + formatNum(second)
}

// 16进制字符串转ArrayBuffer
export function str2ab (str) {
  if(!str) return
  const array = []
  for (let i = 0; i < str.length; i += 2) {
    array.push(str.substring(i, i + 2))
  }
  const val = array.join(',')
  return new Uint8Array(val.match(/[\da-f]{2}/gi).map(item => parseInt(item, 16))).buffer
}

// ArrayBuffer转16进制字符串
export function ab2str (ab) {
  return Array.prototype.map.call(
    new Uint8Array(ab),
    (bit) => formatNum(bit.toString(16))
  ).join('')
}

// int转16进制4位小端模式，如果是8位就把2 ** 16 改为 2 ** 32
export function dec2hex (num, len = 4) { // len为输出的是4位还是8位
  return (num + 2 ** (4 * len)).toString(16).match(/\B../g).reverse().join('')
}

// 16进制小端模式转int, 请先确保str是一个16进制数，且有4n位
export function hex2dec (str) {
  return parseInt(str.match(/../g).reverse().join(''), 16)
}

// 16进制转对应ascll字符串
export function hex2ascll (hex) {
  let str = ''
  for(let i = 0; i < hex.length; i += 2){
    str += String.fromCharCode(parseInt(hex.substr(i, 2), 16))
  }
  return str.trim() // 有可能尾巴有空格
}

// 16进制有符号数
export function parseShort(num, len = 4) { // len为字符数，默认4字符2字节
  const posMax = (16 ** len) / 2 - 1 // 能够表示的最大正数
  if (num > posMax) {
    return num - 16 ** len
  } else if (num === posMax) {
    return 0
  } else {
    return num
  }
}

// Array.chunk, 将数组按size分成n段
export function chunk (arr, size) {
  if(arr.length <= 0 || size <= 0){
    return arr
  }
  let chunks = []
  for(let i = 0; i < arr.length; i = i + size){
    chunks.push(arr.slice(i, i + size))
  }
  return chunks
}
